package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.User;
import com.itheima.reggie.service.UserService;
import com.itheima.reggie.utils.ValidateCodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.apache.commons.lang.StringUtils;
import javax.servlet.http.HttpSession;
import java.util.Map;

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 获取验证码
     *
     * @param user
     * @param session
     * @return
     */
    @PostMapping("/sendMsg")
    public R<String> sendMsg(@RequestBody User user, HttpSession session) {
        //获取user中的手机号码
        String phone = user.getPhone();
        //判断手机号码是否为空
        if (StringUtils.isNotBlank(phone)) {
            //调用工具类生产4位验证码
            String code = ValidateCodeUtils.generateValidateCode(4).toString();
            log.info("code={}", code);
            if (code != null) {
                //将手机号码和验证码保存到session中，用户后续登录使用
                session.setAttribute(phone, code);
                return R.success("手机验证码短信发送成功");
            }
        }
        return R.error("手机验证码短信发送失败");
    }

//    /**
//     * 需要验证码，也能登录版本
//     *
//     * @param map
//     * @param session
//     * @return
//     */
//    @PostMapping("/login")
//    public R<User> login(@RequestBody Map map, HttpSession session) {
//        //从MAP种获取电话号码
//        String phone = map.get("phone").toString();
//        //从MAP种获取验证码
//        String code = map.get("code").toString();
//        //根据session获取保存的验证码信息
//        Object attribute = session.getAttribute(phone);
//        //判断验证码是否于session中的一直
//        if (attribute != null && attribute.equals(code)) {
//            //根据手机号码创建条件
//            LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
//            queryWrapper.eq(User::getPhone, phone);
//            //使用userService调用getOne方法讲设置好的手机号码条件。必须是唯一单一
//            User user = userService.getOne(queryWrapper);
//            //判断手机号码是否为空
//            if (user == null) {
//                //为空择默认表示新注册，创建新的对象，设置电话号码和启用类型
//                user = new User();
//                user.setPhone(phone);
//                user.setStatus(1);
//                //保存到数据中
//                userService.save(user);
//            }
//            //user中的ID对象保存到session中把
//            session.setAttribute("user", user.getId());
//
//            return R.success(user);
//        }
//        return R.error("登录失败");
//    }
    /**
     * 不需要验证码，也能登录版本
     * @param map
     * @param session
     * @return
     */
    @PostMapping("/login")
    public R<User> login(@RequestBody Map map, HttpSession session){
        String phone = map.get("phone").toString();
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getPhone,phone);
        User user = userService.getOne(queryWrapper);
        if (user==null){
            user = new User();
            user.setPhone(phone);
            user.setStatus(1);
            userService.save(user);
            session.setAttribute("user",user.getId());
            return R.success(user);
        }
        session.setAttribute("user",user.getId());
        return R.success(user);
    }
}




